package strategy

import (
	"log"
)

// MustPassStrategy 实现
type MustPassStrategy struct {
	requiredNodes []string // 要求经过的节点ID列表
}

type MustPassConfig struct {
	Nodes []string
}

func (s *MustPassStrategy) GetType() ConstraintType {
	return MustPass
}

func (s *MustPassStrategy) Evaluate(current MultiObjectiveScore, link *LinkWithAttrs) MultiObjectiveScore {
	// 这里不修改评分，只用于路径筛选
	return current
}

func (s *MustPassStrategy) Apply(args ...interface{}) bool {
	// 第一个参数是 *Path，第二个是 map[string]bool
	if len(args) < 1 {
		return false
	}

	visited, ok1 := args[0].(map[string]bool)

	if !ok1 {
		return false
	}

	for _, node := range s.requiredNodes {
		if !visited[node] {
			log.Fatalf("路径未经过必经节点: %s\n", node)
			return false
		}
	}

	return true
}
